/*********************************************************
This class is derived from the class TypeANCU
which has a sequence of composite vents and a single vent.
The ID of this class is "B".  The class maintains the method that
depends its own configuraton to calculate its output .
*********************************************************/
#pragma once
#ifndef _TypeBNCU
#define _TypeBNCU
#include <algorithm>
#include "TypeANCU.h"
#include "Misc.h"
#include "NCUGenomeSet.h"
class TypeBNCU: virtual public TypeANCU
{
public:
	// constructors
	TypeBNCU();
	TypeBNCU(const unsigned int &config);
	TypeBNCU(const unsigned int &config, const vector<double> &paras);
	TypeBNCU(const TypeBNCU &rhs);
	// destructor
	virtual ~TypeBNCU();
	// operator assignment
	TypeBNCU& operator=(const TypeBNCU &rhs);
	/*********************************************
	Configuration Section
	*********************************************/
	// get the number of parameters of a NCU
	virtual const unsigned int number() const;
	/*********************************************
	Parameters Section
	*********************************************/
	// assign all parametrs of a NCU
	virtual bool parameters(const vector<double> &paras);
	// get all parameters of a NCU
	virtual vector< double> parameters() const;
	// virtual constructor
	virtual GeneralNCU* clone() const;
	// simulation and update the current sill
	virtual outputPair simulation(const double &input);
	// get the genome information
	virtual vector<const GenomeType*> genome() const;
protected:
	// calculate the output of the composite outputs
	virtual double output(const double &sill);
protected:
	SingleVent m_SingleVent;
};
#endif